<

Android 上の FlutterMain.setIsRunningInRobolectricTest が削除されました

まとめ

Java JUnit テスト (Robolectric テストなど) を作成する場合 Flutter エンジンの Java 埋め込みに対抗し、FlutterMain.setIsRunningInRobolectricTest(true)API、 これを次のように置き換えます。

FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
        new FlutterInjector.Builder()
            .setFlutterLoader(new FlutterLoader(mockFlutterJNI))
            .build());

これは非常に珍しいことです。

コンテクスト

FlutterMainクラス自体は非推奨になり、次のクラスに置き換えられます。FlutterInjectorクラス。のFlutterMainクラスはいくつかの値を使用します 静的な変数や関数を使用すると、テストが困難になります。FlutterMain.setIsRunningInRobolectricTest()は 1 つのアドホック静的です テストを必要とせずに JVM 上のホスト マシンでテストを実行できるようにするメカニズム。 をロードしていますlibflutter.soネイティブライブラリ (ホストマシンでは実行できません)。

1 回限りのソリューションではなく、テストに必要なすべての依存関係の注入 Flutter の Android/Java エンジンの埋め込みは、FlutterInjectorクラス。

以内FlutterInjectorクラス、 のsetFlutterLoader()ビルダー 関数を使用すると、FlutterLoaderクラスが検索してロードします のlibflutter.so図書館。

変更内容の説明

これエンジンコミットを削除しましたFlutterMain.setIsRunningInRobolectricTest()テスト機能。 そして次の専念を追加しましたFlutterInjectorテストを支援するクラス。PR 20473さらにリファクタリングされたFlutterLoaderFlutterJNI追加のモックとテストを可能にするため。

追加のモック/テストを可能にするため。

移行ガイド

移行前のコード:

FlutterMain.setIsRunningInRobolectricTest(true);

移行後のコード:

FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
        new FlutterInjector.Builder()
            .setFlutterLoader(new FlutterLoader(mockFlutterJNI))
            .build());

タイムライン

リリースされたバージョン: 1.22.0-2.0.pre.133
安定版リリース: 2.0.0